<?php


namespace App\Http\Controllers\Api;


use App\Services\MenuService;
use Illuminate\Http\Request;

class MenuController extends BaseController
{

    /**
     * @api {post} api/menu/store 01、创建菜单
     * @apiName Store-Menu
     * @apiGroup 03-Menu
     * @apiVersion 1.0.0
     *
     * @apiParam {String} menu_name 菜单名称
     * @apiParam {Number} module 归属模块 0:终端功能 1:超级后台
     * @apiParam {Number} pid 上级主键
     * @apiParam {String} uri 默认路径
     * @apiParam {String} icon 菜单图标
     * @apiParam {Number{0,1}} [is_buy=0] 是否售卖 0:否 1:是
     * @apiParam {Decimal} [unit_price] 售卖单价 *注:如果 is_buy = 1 此项必须
     * @apiParam {Number{0,1}} [is_hide=0] 是否隐藏 0:否 1:是
     * @apiParam {Number} [sort=50] 排序数值（升序）
     * @apiParam {Number{0,1}} [status=1] 可用状态 0:停用 1:正常
     * @apiParam {Array} [rules] 绑定节点主键数据集
     *
     * @apiSuccess {Number} code 成功返回标识为200，其他均为失败
     * @apiSuccess {String} message 响应结果描述
     *
     * @apiSuccess {Object} data 返回数据集
     * @apiSuccess {Params} data.other 其他参照模块【03-02】接口响应参数
     *
     * @param Request $request
     * @param MenuService $service
     * @return \Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Model|object|null
     * @throws \Exception
     */
    public function store(Request $request, MenuService $service) {
        return $service->store($request->post());
    }

    /**
     * @api {get} api/menu/info/{id} 02、菜单信息
     * @apiName Show-Menu
     * @apiGroup 03-Menu
     * @apiVersion 1.0.0
     *
     * @apiParam {Number} :id 菜单主键【menu_id】
     *
     * @apiSuccess {Number} code 成功返回标识为200，其他均为失败
     * @apiSuccess {String} message 响应结果描述
     *
     * @apiSuccess {Object} data 返回数据集
     * @apiSuccess {Number} data.menu_id 菜单主键
     * @apiSuccess {String} data.menu_name 菜单名称
     * @apiSuccess {Number} data.module 归属模块 0:终端功能 1:超级后台
     * @apiSuccess {Number} data.pid 上级主键
     * @apiSuccess {String} data.uri 默认路径
     * @apiSuccess {String} data.icon 菜单图标
     * @apiSuccess {Number} data.is_buy 是否售卖 0:否 1:是
     * @apiSuccess {Number} data.is_hide 是否隐藏 0:否 1:是
     * @apiSuccess {Number} data.sort 排序数值（升序）
     * @apiSuccess {Number} data.status 可用状态 0:停用 1:正常
     * @apiSuccess {DateTime} data.created_at 数据创建时间
     *
     * @apiSuccess {Object} data.expands 扩展参数
     * @apiSuccess {Decimal} data.expands.unit_price 售卖单价
     *
     * @apiSuccess {Array} data.rules 绑定节点数据集
     * @apiSuccess {Number} data.rules.rule_id 节点主键
     * @apiSuccess {String} data.rules.rule_name 节点名称
     * @apiSuccess {String} data.rules.uri 请求路径
     *
     * @param MenuService $service
     * @param $id
     * @return \Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Model|object|null
     * @throws \Exception
     */
    public function show(MenuService $service, $id) {
        return $service->show($id, false);
    }

    /**
     * @api {post} api/menu/update/{id} 03、更新菜单
     * @apiName Update-Menu
     * @apiGroup 03-Menu
     * @apiVersion 1.0.0
     *
     * @apiParam {Number} :id 菜单主键【menu_id】
     * @apiParam {String} [menu_name] 菜单名称
     * @apiParam {Number} [module] 归属模块 0:终端功能 1:超级后台
     * @apiParam {Number} [pid] 上级主键
     * @apiParam {String} [uri] 默认路径
     * @apiParam {String} [icon] 菜单图标
     * @apiParam {Number{0,1}} [is_buy=0] 是否售卖 0:否 1:是
     * @apiParam {Decimal} [unit_price] 售卖单价 *注:如果 is_buy = 1 此项必须
     * @apiParam {Number{0,1}} [is_hide=0] 是否隐藏 0:否 1:是
     * @apiParam {Number} [sort=50] 排序数值（升序）
     * @apiParam {Number{0,1}} [status=1] 可用状态 0:停用 1:正常
     * @apiParam {Array} [rules] 绑定节点主键数据集
     *
     * @apiSuccess {Number} code 成功返回标识为200，其他均为失败
     * @apiSuccess {String} message 响应结果描述
     *
     * @apiSuccess {Object} data 返回数据集
     * @apiSuccess {Params} data.other 其他参照模块【03-02】接口响应参数
     *
     * @param Request $request
     * @param MenuService $service
     * @param $id
     * @return \Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Model|object|null
     * @throws \Exception
     */
    public function update(Request $request, MenuService $service, $id) {
        return $service->update($id, $request->input());
    }

    /**
     * @api {delete} api/menu/destroy/{id} 04、删除菜单
     * @apiName Destroy-Menu
     * @apiGroup 03-Menu
     * @apiVersion 1.0.0
     *
     * @apiParam {Number} :id 菜单主键【menu_id】
     *
     * @apiSuccess {Number} code 成功返回标识为200，其他均为失败
     * @apiSuccess {String} message 响应结果描述
     *
     * @param MenuService $service
     * @param $id
     * @return mixed
     * @throws \Throwable
     */
    public function destroy(MenuService $service, $id) {
        return $service->destroy($id);
    }

    /**
     * @api {get} api/menu/lists 05、菜单列表
     * @apiName Index-Menu
     * @apiGroup 03-Menu
     * @apiVersion 1.0.0
     *
     * @apiParam {Number{0,1}} [module=1] 根据模块筛选 0:终端功能 1:超级后台
     * @apiParam {String{lists,tree}} [format=tree] 数据结构 lists:列表 tree:树状
     *
     * @apiSuccess {Number} code 成功返回标识为200，其他均为失败
     * @apiSuccess {String} message 响应结果描述
     *
     * @apiSuccess {Object} data 返回数据集
     * @apiSuccess {Params} data.other 其他参照模块【03-02】接口响应参数
     *
     * @apiSuccess {Array} [data.children] 子级节点数据集 注：没有子级时该字段不存在
     *
     * @param Request $request
     * @param MenuService $service
     * @return array
     */
    public function lists(Request $request, MenuService $service) {
        return $service->lists($request->query());
    }
}
